

// 输入：s = "babad"
// 输出："bab"
// 解释："aba" 同样是符合题意的答案。
// 不可以删除
 

// 双指针 比动态规划更易理解
var longestPalindrome = function(s) {
    let str = '';
    for(let i = 0,start = 0, end = 0; i<s.length; i++) {
        start = i;
        end = i;
        while(end + 1 < s.length && s[end + 1] === s[i]) {
            end +=1;
        }
        while(start - 1 >=0 && end + 1 < s.length && s[end + 1] === s[start - 1]) {
            end +=1;
            start -=1;
        }
        if (end > start && str.length < end - start + 1) {
            str = s.slice(start, end + 1);
        }
    }
    return str ? str : s[0];
};


var longestPalindrome = function(s) {
    let max = ''

    for(let i=0; i< s.length; i++) {
        // 分奇偶， 一次遍历，每个字符位置都可能存在奇数或偶数回文
        helper(i, i)
        helper(i, i+1)
    }

    function helper(l, r) {
        // 定义左右双指针
        while(l>=0 && r< s.length && s[l] === s[r]) {
            l--
            r++
        }
        // 拿到回文字符， 注意 上面while满足条件后多执行了一次，所以需要l+1, r+1-1
        const maxStr = s.slice(l + 1, r + 1 - 1);
        // 取最大长度的回文字符
        if (maxStr.length > max.length) max = maxStr
    }
    return max
};